#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStringList>
#include <QStringListModel>
#include <QModelIndex>
#include <QCloseEvent>
#include "headdefine.h"
#include "typedefine.h"
#include "sessionDemo.h"

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    int getServerFd();      //得到与服务器端进行通信的套接字
    void classifyFunc(struct def_msg msg);  //消息分类处理
    void onlinePeopleAdd(QString name);     //上线消息,在线人数+1
    void downlinePeopleDesc(QString name);  //下线消息,在线人数-1

private:
    Ui::MainWindow *ui;
    int serv_fd;        //与服务器进行通信的套接字
    int user_id;        //当前用户的帐号
    QString user_name;  //当前用户的昵称
    QStringList strList;    //设置QListView为QStringList模式
    QStringListModel *model;    //模式设置

signals:
    void recvStartSignal();     //开启接收信号,接收来自服务器的消息
    void classifySignal(struct def_msg msg);    //消息分类处理的信号

private slots:
    void on_listOnline_doubleClicked(QModelIndex index);    //QListView双击响应
    void startup(int fd, int id, QString name);     //登录成功,开启聊天室，在登录成功后唤醒
    void recvStartSlot();   //接收来自服务器的消息,由recvStartSignal唤醒
    void classifyMessage(struct def_msg msg);   //消息分类处理函数,classifySignal唤醒
    void on_btnCancel_clicked();    //"发送"按钮单击响应,发送消息
    void on_btnSend_clicked();      //"取消"按钮单击响应,清空发送区的内容
    void closeEvent(QCloseEvent *); //重写窗口关闭事件
};

#endif // MAINWINDOW_H
